\documentclass{article}
\usepackage{graphicx} % Required for inserting images
\usepackage{ctex}

\title{Inter}
\author{王薪雅 3220300210}
\date{July 2023}

\begin{document}

\maketitle

\section{1D Interpolation Example Programs}
以下程序演示了插值和样条函数的使用。它计算了一个10个数据点$(x_i, y_i)$的三次样条插值，其中 $x_i = i + sin(i)/2，y_i = i + cos(i^2)$，其中 $i$ 的取值范围为 0 到 9。\\
\#include 指令是预处理指令，用于包含头文件（libraries），这些头文件包含程序所需的函数和类型声明。在这个例子中，我们包含了 <stdlib.h>, <stdio.h>, <math.h>, <gsl/gsl\_errno.h> 和 <gsl/gsl\_spline.h> 这些头文件。\\
int main(void) 是 C 语言的主函数，程序从这里开始执行。\\
创建了一些变量，包括循环计数器 i，插值结果 xi 和 yi，以及用于存储数据点的数组 x 和 y。\\
打印输出 \#m=0,S=17，表示将要输出原始数据点。\\
进入一个 for 循环，将每个数据点 (x[i], y[i]) 的 x 坐标和 y 坐标分别赋值给数组 x 和 y，并打印输出 \#m=1,S=0，表示接下来将要输出插值结果。\\
程序通过调用 gsl\_spline\_alloc 函数和 gsl\_interp\_accel\_alloc 函数来分配内存以供插值使用。
\begin{itemize}
    \item gsl\_spline\_alloc函数\\
gsl\_spline\_alloc 函数用于创建一个 gsl\_spline 结构体实例，并指定插值类型为 gsl\_interp\_cspline（表示使用三次样条插值）。
\end{itemize}
\begin{itemize}
    \item gsl\_interp\_accel\_alloc 函数\\
    gsl\_interp\_accel\_alloc 函数用于创建一个 gsl\_interp\_accel 结构体实例，用于加速插值计算过程。
\end{itemize}

接下来，通过调用 gsl\_spline\_init 函数，将数据点数组 x 和 y 传入 gsl\_spline 结构体中进行初始化。

然后，通过使用 gsl\_spline\_eval 函数在两个相邻的数据点之间进行线性插值，计算出给定坐标 xi 对应的插值结果 yi。这个过程通过一个循环，从 x[0] 开始逐步增加 0.01，直到 x[9]。

最后，释放先前分配的内存资源，即调用 gsl\_spline\_free 和 gsl\_interp\_accel\_free 函数。

整个程序输出结果中，以 "\#$m=0,S=17$" 开头的部分是原始数据点的输出，以 "\#$m=1,S=0$" 开头的部分是对数据点进行样条插值后得到的插值结果的输出。

\begin{figure}
    \centering
    \includegraphics{interp.eps}
    \caption{生成图像}
    \label{fig:enter-label}
\end{figure}

\end{document}
